From 55e8bb3f3f91d6ed5fbed991996428589bda47cb Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Thu, 24 May 2007 11:33:39 +0100 Subject: [PATCH] Clean up map_domain_page(). Signed-off-by: Keir Fraser --- xen/arch/x86/hvm/vlapic.c | 11 ++++++----- xen/arch/x86/mm/shadow/multi.c | 3 ++- xen/arch/x86/x86_32/domain_page.c | 18 +++++++----------- xen/include/asm-x86/hap.h | 12 ------------ 4 files changed, 15 insertions(+), 29 deletions(-) diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c index e9d6330f31..e9efdda2b4 100644 --- a/xen/arch/x86/hvm/vlapic.c +++ b/xen/arch/x86/hvm/vlapic.c @@ -918,16 +918,16 @@ int vlapic_init(struct vcpu *v) vlapic->regs_page = alloc_domheap_page(NULL); if ( vlapic->regs_page == NULL ) { - dprintk(XENLOG_ERR, "malloc vlapic regs_page error for vcpu %x\n", - v->vcpu_id); + dprintk(XENLOG_ERR, "alloc vlapic regs error: %d/%d\n", + v->domain->domain_id, v->vcpu_id); return -ENOMEM; } vlapic->regs = map_domain_page_global(page_to_mfn(vlapic->regs_page)); if ( vlapic->regs == NULL ) { - dprintk(XENLOG_ERR, "malloc vlapic regs error for vcpu %x\n", - v->vcpu_id); + dprintk(XENLOG_ERR, "map vlapic regs error: %d/%d\n", + v->domain->domain_id, v->vcpu_id); return -ENOMEM; } @@ -935,7 +935,8 @@ int vlapic_init(struct vcpu *v) vlapic_reset(vlapic); - vlapic->hw.apic_base_msr = MSR_IA32_APICBASE_ENABLE | APIC_DEFAULT_PHYS_BASE; + vlapic->hw.apic_base_msr = (MSR_IA32_APICBASE_ENABLE | + APIC_DEFAULT_PHYS_BASE); if ( v->vcpu_id == 0 ) vlapic->hw.apic_base_msr |= MSR_IA32_APICBASE_BSP; diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 57e25c829f..cfd4c70c21 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -3487,6 +3487,7 @@ sh_update_cr3(struct vcpu *v, int do_locking) v->arch.paging.shadow.guest_vtable = sh_map_domain_page_global(gmfn); /* PAGING_LEVELS==4 implies 64-bit, which means that * map_domain_page_global can't fail */ + BUG_ON(v->arch.paging.shadow.guest_vtable == NULL); } else v->arch.paging.shadow.guest_vtable = __linear_l4_table; @@ -3519,7 +3520,7 @@ sh_update_cr3(struct vcpu *v, int do_locking) v->arch.paging.shadow.guest_vtable = sh_map_domain_page_global(gmfn); /* Does this really need map_domain_page_global? Handle the * error properly if so. */ - ASSERT( v->arch.paging.shadow.guest_vtable ); + BUG_ON(v->arch.paging.shadow.guest_vtable == NULL); /* XXX */ } else v->arch.paging.shadow.guest_vtable = __linear_l2_table; diff --git a/xen/arch/x86/x86_32/domain_page.c b/xen/arch/x86/x86_32/domain_page.c index 59c129ee13..fb5bac81c0 100644 --- a/xen/arch/x86/x86_32/domain_page.c +++ b/xen/arch/x86/x86_32/domain_page.c @@ -98,7 +98,7 @@ void *map_domain_page(unsigned long mfn) cache->tlbflush_timestamp = tlbflush_current_time(); idx = find_first_zero_bit(cache->inuse, MAPCACHE_ENTRIES); - ASSERT(idx < MAPCACHE_ENTRIES); + BUG_ON(idx >= MAPCACHE_ENTRIES); } set_bit(idx, cache->inuse); @@ -218,25 +218,21 @@ void *map_domain_page_global(unsigned long mfn) idx = find_first_zero_bit(inuse, GLOBALMAP_BITS); va = IOREMAP_VIRT_START + (idx << PAGE_SHIFT); - if ( va >= FIXADDR_START ) + if ( unlikely(va >= FIXADDR_START) ) { - va = 0; - goto fail; + spin_unlock(&globalmap_lock); + return NULL; } } set_bit(idx, inuse); inuse_cursor = idx + 1; - fail: spin_unlock(&globalmap_lock); - if ( likely(va != 0) ) - { - pl2e = virt_to_xen_l2e(va); - pl1e = l2e_to_l1e(*pl2e) + l1_table_offset(va); - l1e_write(pl1e, l1e_from_pfn(mfn, __PAGE_HYPERVISOR)); - } + pl2e = virt_to_xen_l2e(va); + pl1e = l2e_to_l1e(*pl2e) + l1_table_offset(va); + l1e_write(pl1e, l1e_from_pfn(mfn, __PAGE_HYPERVISOR)); return (void *)va; } diff --git a/xen/include/asm-x86/hap.h b/xen/include/asm-x86/hap.h index 9c070f6fa8..27b47766fd 100644 --- a/xen/include/asm-x86/hap.h +++ b/xen/include/asm-x86/hap.h @@ -48,18 +48,6 @@ hap_unmap_domain_page(void *p) unmap_domain_page(p); } -static inline void * -hap_map_domain_page_global(mfn_t mfn) -{ - return map_domain_page_global(mfn_x(mfn)); -} - -static inline void -hap_unmap_domain_page_global(void *p) -{ - unmap_domain_page_global(p); -} - /************************************************/ /* locking for hap code */ /************************************************/ -- 2.30.2